2
0

delete.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { createRoute, OpenAPIHono, z } from '@hono/zod-openapi';
  2. import { FileService } from '../../../modules/files/file.service';
  3. import { ErrorSchema } from '../../../utils/errorHandler';
  4. import { AppDataSource } from '../../../data-source';
  5. import { AuthContext } from '../../../types/context';
  6. import { authMiddleware } from '../../../middleware/auth.middleware';
  7. // 删除文件路由
  8. const deleteFileRoute = createRoute({
  9. method: 'delete',
  10. path: '/{id}',
  11. middleware: [authMiddleware],
  12. request: {
  13. params: z.object({
  14. id: z.coerce.number().openapi({
  15. param: { name: 'id', in: 'path' },
  16. example: 1,
  17. description: '文件ID'
  18. })
  19. })
  20. },
  21. responses: {
  22. 200: {
  23. description: '文件删除成功',
  24. content: {
  25. 'application/json': {
  26. schema: z.object({
  27. success: z.boolean().openapi({ example: true }),
  28. message: z.string().openapi({ example: '文件删除成功' })
  29. })
  30. }
  31. }
  32. },
  33. 404: {
  34. description: '文件不存在',
  35. content: { 'application/json': { schema: ErrorSchema } }
  36. },
  37. 500: {
  38. description: '服务器错误',
  39. content: { 'application/json': { schema: ErrorSchema } }
  40. }
  41. }
  42. });
  43. // 创建路由实例
  44. const app = new OpenAPIHono<AuthContext>().openapi(deleteFileRoute, async (c) => {
  45. try {
  46. const { id } = c.req.valid('param');
  47. // 创建文件服务实例
  48. const fileService = new FileService(AppDataSource);
  49. await fileService.deleteFile(id);
  50. return c.json({ success: true, message: '文件删除成功' }, 200);
  51. } catch (error) {
  52. const message = error instanceof Error ? error.message : '文件删除失败';
  53. const code = (error instanceof Error && error.message === '文件不存在') ? 404 : 500;
  54. return c.json({ code, message }, code);
  55. }
  56. });
  57. export default app;